﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SoftHotel.Models;
using System.Data.Entity;
using System.Data;

namespace SoftHotel.Controllers
{
    public class AmbientesController : Controller
    {
        public AmbienteDAO listaAmb = new AmbienteDAO();
        public AmbienteDAO ambienteDao = new AmbienteDAO();
        public ParametroDAO parametroDao = new ParametroDAO();
        public SedeDAO sedeDao = new SedeDAO();

        //
        // GET: /Ambientes/

        public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page)
        {
            ViewBag.idSede = new SelectList(sedeDao.sedes, "idSede", "nombre");
            ViewBag.tipoAmbiente = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_HABITACION" || u.tipo == "TIPO_DE_SALON"), "idParametro", "valor");
            ViewBag.estado = new SelectList(parametroDao.parametros.Where(u => u.tipo == "ESTADO_AMBIENTE"), "idParametro", "valor");
            return View();
        }

        //
        // POST: /Ambientes/

        [HttpPost]
        public ActionResult Index(Ambiente ambiente, string button)
        {
            if (button == "Buscar")
            {
                return RedirectToAction("Search", "Ambientes", ambiente);
            }
            else
            {
                return RedirectToAction("Create", "Ambientes");
            }
        }

        //
        // GET: /Ambientes/Search

        public ActionResult Search(Ambiente ambiente)
        {
            var listaAmb = ambienteDao.ambientes.Where(a => a.idAmbiente > 0);

            listaAmb = listaAmb.Include(a => a.sede);
            listaAmb = listaAmb.Include(a => a.pTipoAmbiente);
            listaAmb = listaAmb.Include(a => a.pEstado);

            if (ambiente.idSede != 0)
            {
                listaAmb = listaAmb.Where(a => a.idSede == ambiente.idSede);
            }
            if (ambiente.tipoAmbiente != 0)
            {
                listaAmb = listaAmb.Where(a => a.tipoAmbiente == ambiente.tipoAmbiente);
            }
            if (ambiente.piso != 0)
            {
                listaAmb = listaAmb.Where(a => a.piso == ambiente.piso);
            }
            if (ambiente.nombre != null)
            {
                listaAmb = listaAmb.Where(a => a.nombre == ambiente.nombre);
            }
            if (ambiente.capacidad != 0)
            {
                listaAmb = listaAmb.Where(a => a.capacidad == ambiente.capacidad);
            }
            if (ambiente.descripcion != null)
            {
                listaAmb = listaAmb.Where(a => a.descripcion == ambiente.descripcion);
            }
            if (ambiente.estado != 0)
            {
                listaAmb = listaAmb.Where(a => a.estado == ambiente.estado);
            }

            return View(listaAmb);
        }

        //
        // POST: /Ambientes/Create

        [HttpPost]
        public ActionResult Search(string button)
        {
            if (button == "Nuevo")
            {
                return RedirectToAction("Create", "Ambientes");
            }
            if (button == "Regresar")
            {
                return RedirectToAction("Index", "Ambientes");
            }
            return RedirectToAction("Search", "Ambientes");
        }

        //
        // GET: /Ambientes/Create

        public ActionResult Create()
        {
            ViewBag.idSede = new SelectList(sedeDao.sedes, "idSede", "nombre");
            ViewBag.tipoAmbiente = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_HABITACION" || u.tipo == "TIPO_DE_SALON"), "idParametro", "valor");
            return View();
        }

        //
        // POST: /Ambientes/Create

        [HttpPost]
        public ActionResult Create(Ambiente ambiente)
        {
            // Todo ambiente nuevo estará disponible y su estado será Activo
            ambiente.disponible = true;
            Parametro parametro = parametroDao.parametros.First(p => p.tipo == "ESTADO_AMBIENTE" && p.valor == "Activo");
            ambiente.estado = parametro.idParametro;

            if (ModelState.IsValid)
            {
                ambienteDao.ambientes.Add(ambiente);
                ambienteDao.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.idSede = new SelectList(sedeDao.sedes, "idSede", "nombre");
            ViewBag.tipoAmbiente = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_HABITACION" || u.tipo == "TIPO_DE_SALON"), "idParametro", "valor");
            return View();
        }

        //
        // GET: /Ambientes/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /Ambientes/Edit/5

        public ActionResult Edit(int id)
        {
            var listaAmb = ambienteDao.ambientes.Include(a => a.sede).Include(a => a.pTipoAmbiente).Include(a => a.pEstado);
            Ambiente ambiente = listaAmb.First(a => a.idAmbiente == id);

            ViewBag.idSede = new SelectList(sedeDao.sedes, "idSede", "nombre", ambiente.idSede);
            ViewBag.tipoAmbiente = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_HABITACION" || u.tipo == "TIPO_DE_SALON"), "idParametro", "valor", ambiente.tipoAmbiente);
            ViewBag.estado = new SelectList(parametroDao.parametros.Where(u => u.tipo == "ESTADO_AMBIENTE"), "idParametro", "valor", ambiente.estado);

            return View(ambiente);
        }

        //
        // POST: /Ambientes/Edit/5

        [HttpPost]
        public ActionResult Edit(Ambiente ambiente)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    ambienteDao.Entry(ambiente).State = EntityState.Modified;
                    ambienteDao.SaveChanges();
                    return RedirectToAction("Index");
                }
                ViewBag.idSede = new SelectList(sedeDao.sedes, "idSede", "nombre", ambiente.idSede);
                ViewBag.tipoAmbiente = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_HABITACION" || u.tipo == "TIPO_DE_SALON"), "idParametro", "valor", ambiente.tipoAmbiente);
                ViewBag.estado = new SelectList(parametroDao.parametros.Where(u => u.tipo == "ESTADO_AMBIENTE"), "idParametro", "valor", ambiente.estado);
                return View();
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Ambientes/Delete/5

        public ActionResult Delete(int id)
        {
            var listaAmb = ambienteDao.ambientes.Include(a => a.sede).Include(a => a.pTipoAmbiente).Include(a => a.pEstado);
            Ambiente ambiente = listaAmb.First(a => a.idAmbiente == id);
            return View(ambiente);
        }

        //
        // POST: /Ambientes/Delete/5

        [HttpPost]
        public ActionResult Delete(Ambiente amb, string button)
        {
            if (button == "Aceptar")
            {    
                var listaAmb = ambienteDao.ambientes.Include(a => a.sede).Include(a => a.pTipoAmbiente);
                Ambiente ambiente = listaAmb.First(a => a.idAmbiente == amb.idAmbiente);
                Parametro parametro = parametroDao.parametros.First(p => p.tipo == "ESTADO_AMBIENTE" && p.valor == "Inactivo");
                ambiente.estado = parametro.idParametro;
                ambienteDao.Entry(ambiente).State = EntityState.Modified;
                ambienteDao.SaveChanges();
            }
            return RedirectToAction("Index", "Ambientes");
        }
    }
}
